Regenerate refs.
Tweak portable times.
#define MYNAME "coastexp"
#define MY_CBUF 4096
-#define MY_TBUF 64
#define MY_UBUF 128
+#define MY_TBUF 64\r
+#define MY_XBUF 128\r
#if NO_EXPAT
void
}
#else
-static void *mkshort_handle; // short-name handle
static char *element; // Current element being parsed
static char *cdatastr; // Current XML character data being built up (until a <lf>)
static ce_mark *currentMark = NULL; // Current mark being processed
static char *time_buffer = NULL; // Time buffer for processing times
static char *uuid_buffer = NULL; // UUID buffer for processing uuid's
+static char *xml_buffer = NULL; // XML buffer for processing XML strings\r
static int inRoute = 0; // Are we processing a route?
static int inMark = 0; // Are we processing a mark?
/* Add a route to the list of routes */
static void
-add_route(ce_route *route)
+ce_add_route(ce_route *route)\r
{
ENQUEUE_TAIL(&ce_route_head, &route->Q);
}
/* Add a mark to the list of stand-alone marks */
static void
-add_mark(ce_mark *mark)
+ce_add_mark(ce_mark *mark)\r
{
ENQUEUE_TAIL(&ce_mark_head, &mark->Q);
}
/* Add a mark to the specified route */
static void
-add_mark_to_route(ce_route *route, ce_mark *mark)
+ce_add_mark_to_route(ce_route *route, ce_mark *mark)\r
{
ENQUEUE_TAIL(&route->ce_mark_head, &mark->Q);
}
/* Free a mark */
static void
-free_mark(ce_mark *mark)
+ce_free_mark(ce_mark *mark)\r
{
xfree(mark->id);
if (mark->created)
/* Free a route */
static void
-free_route(ce_route *route)
+ce_free_route(ce_route *route)\r
{
queue *elem, *tmp;
QUEUE_FOR_EACH(&route->ce_mark_head, elem, tmp) {
ce_mark *mark = (ce_mark *) elem;
- free_mark(mark);
+ ce_free_mark(mark);\r
}
xfree(route->id);
xfree(route);
// Create a CE route object and add it to the list of routes
currentRoute = (ce_route *) xcalloc(sizeof (ce_route), 1);
currentRoute->id=xstrdup(ap[1]);
+ if (doing_rtes)\r
currentRoute->r = route_head_alloc();
QUEUE_INIT(¤tRoute->ce_mark_head);
- add_route(currentRoute);
+ ce_add_route(currentRoute);\r
}
}
} else if (0 == strcmp(el, "Mark")) {
currentMark = (ce_mark *) xcalloc(sizeof (ce_mark), 1);
currentMark->wp = NULL;
currentMark->used = 0;
- add_mark(currentMark);
+ ce_add_mark(currentMark);\r
for (ap = attr; *ap; ap+=2) {
if (0 == strcmp(ap[0], "id")) {
// Create a CE mark object and add it to the list of stand-alone marks
mark->id = xstrdup(s);
mark->created = NULL;
mark->wp = NULL;
- add_mark_to_route(currentRoute, mark);
+ ce_add_mark_to_route(currentRoute, mark);\r
}
} else if (0 == strcmp(element, "Position")) {
if (inMark) {
currentMark->wp->creation_time = mktime(&t);
}
}
- else if (inRoute)
+ else if (inRoute) {\r
+ if (doing_rtes)\r
currentRoute->r->rte_name = xstrdup(s);
+ }\r
} else if (0 == strcmp(element, "Description")) {
// Descriptions we care about may be either for routes or marks
char *desc = xstrdup(s);
/* Fix waypoints in route marks from the standalone marks */
void
-ce_fix_waypoints(void)
+ce_fix_route_mark_waypoints(void)\r
{
queue *elem, *tmp;
QUEUE_FOR_EACH(&ce_route_head, elem, tmp) {
/* Remove marks used in routes */
void
-ce_remove_unused_marks(void)
+ce_remove_used_marks(void)\r
{
queue *elem, *tmp;
QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
dequeue(elem);
if (mark->wp)
waypt_free(mark->wp);
- free_mark(mark);
+ ce_free_mark(mark);\r
}
}
}
void
ce_rd_deinit(void)
{
+ /* If doing routes, we create GPSBabel route structures and waypoint structures for\r
+ any standalone waypoints.\r
+ If doing waypoints, we create only waypoint structures for both route waypoints and\r
+ standalone waypoints.\r
+ */\r
queue *elem, *tmp;
- ce_fix_waypoints();
+ if (doing_rtes) {\r
+ ce_fix_route_mark_waypoints();\r
ce_check_route_names();
- ce_remove_unused_marks();
- // ce_print_results();
+ ce_remove_used_marks();\r
+ }\r
+\r
+ // Log results\r
+ if (global_opts.debug_level > 1)\r
+ ce_print_results();\r
// Add routes to GPSBabel
QUEUE_FOR_EACH(&ce_route_head, elem, tmp) {
ce_route *route = (ce_route *) elem;
+ if (doing_rtes) {\r
queue *elem2, *tmp2;
route_add_head(route->r);
QUEUE_FOR_EACH(&route->ce_mark_head, elem2, tmp2) {
else
printf("Undefined mark: %s\n", mark->id);
}
- free_route(route);
+ }\r
+ ce_free_route(route);\r
}
// Add (unused) marks to GPSBabel
QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
ce_mark *mark = (ce_mark *) elem;
waypt_add(mark->wp);
- free_mark(mark);
+ ce_free_mark(mark);\r
}
fclose(fd);
xfree(cdatastr);
}
+/* Setup for writing */\r
void
ce_wr_init(const char *fname)
{
- mkshort_handle = mkshort_new_handle();
QUEUE_INIT(&ce_mark_head);
+\r
+ // Alloocate all buffers used for writing\r
time_buffer = xcalloc(MY_TBUF,1);
uuid_buffer = xcalloc(MY_UBUF,1);
+ xml_buffer = xcalloc(MY_XBUF, 1);\r
ofd = xfopen(fname, "w", MYNAME);
}
ce_wr_deinit(void)
{
fclose(ofd);
- mkshort_del_handle(mkshort_handle);
+\r
+ // Free the buffers used for writing\r
xfree(time_buffer);
xfree(uuid_buffer);
+ xfree(xml_buffer);\r
}
+/* Generate a CE-style creation time based on supplied time */\r
static char *
ce_gen_creation_time(time_t tm)
{
- struct tm *t = localtime(&tm);
- sprintf(time_buffer, "%04d%02d%02dT%02d%02d%02dZ", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
+ xml_fill_in_time(time_buffer, tm, XML_SHORT_TIME);\r
return time_buffer;
}
+/* Generate a CE-style creation time based on current time */\r
static char *
ce_gen_current_time(void)
{
return ce_gen_creation_time(current_time());
}
+/* Generate a UUID (has same format as Microsoft registry GUIDs */\r
static char *
ce_gen_uuid(void)
{
return uuid_buffer;
}
+/* Generate route header XML */\r
static void
ce_route_hdr(const route_head *rte)
{
- fprintf(ofd, "\t<Route created=\"%s\" id=\"{%s}\">\n", ce_gen_current_time(), ce_gen_uuid());
- fprintf(ofd, "\t\t<Marks>\n");
+ if (doing_rtes) {\r
+ sprintf(xml_buffer, "{%s}", ce_gen_uuid());\r
+ write_xml_entity_begin2(ofd, "\t", "Route", "created", ce_gen_current_time(), "id", xml_buffer);\r
+ write_xml_entity_begin0(ofd, "\t\t", "Marks");\r
+ }\r
}
+/* Generate route body XML */\r
static void
ce_route_disp(const waypoint *waypointp)
{
currentMark->id = id;
currentMark->wp = (waypoint *) waypointp;
ENQUEUE_TAIL(&ce_mark_head, ¤tMark->Q);
- fprintf(ofd, "\t\t\t%s\n", id);
+ fprintf(ofd, "\t\t\t%s\n", id); // CE's departure from XML standard!\r
}
+/* Generate route trailer XML */\r
static void
ce_route_tlr(const route_head *rte)
{
- fprintf(ofd, "\t\t</Marks>\n");
- if (rte->rte_name)
- fprintf(ofd, "\t\t<Name>%s</Name>\n", rte->rte_name);
- fprintf(ofd, "\t</Route>\n");
-}
-
-static void
-ce_waypt_pr(const waypoint *waypointp)
-{
+ if (doing_rtes) {\r
+ write_xml_entity_end(ofd, "\t\t", "Marks");\r
+ write_optional_xml_entity(ofd, "\t\t", "Name", rte->rte_name);\r
+ write_xml_entity_end(ofd, "\t", "Route");\r
+ }\r
}
+/* Generate waypoint body XML */\r
static void
-ce_mark_pr(void)
+ce_waypt_pr(const waypoint *wp)\r
{
- queue *elem, *tmp;
- QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {
- ce_mark *mark = (ce_mark *) elem;
- double latitude = mark->wp->latitude;
+ double latitude = wp->latitude;\r
char NorS = 'N';
char EorW = 'E';
- double longitude = mark->wp->longitude;
- fprintf(ofd, "\t<Mark created=\"%s\" id=\"%s\">\n", ce_gen_creation_time(mark->wp->creation_time), mark->id);
+ double longitude = wp->longitude;\r
+\r
if (latitude < 0) {
latitude = -latitude;
NorS = 'S';
longitude = -longitude;
EorW = 'W';
}
- fprintf(ofd, "\t\t<Position>%3.6f %c %3.6f %c</Position>\n", latitude, NorS, longitude, EorW);
- if (mark->wp->shortname)
- fprintf(ofd, "\t\t<Name>%s</Name>\n", mark->wp->shortname);
- fprintf(ofd, "\t</Mark>\n");
- free_mark(mark);
+ sprintf(xml_buffer, "%3.6f %c %3.6f %c", latitude, NorS, longitude, EorW);\r
+ write_xml_entity(ofd, "\t\t", "Position", xml_buffer);\r
+ write_optional_xml_entity(ofd, "\t\t", "Name", wp->shortname);\r
+}\r
+\r
+/* Generate a standalone mark XML */\r
+static void\r
+ce_standalone_mark_pr(const waypoint *wp)\r
+{\r
+ write_xml_entity_begin2(ofd, "\t", "Mark",\r
+ "created", ce_gen_current_time(),\r
+ "id", ce_gen_uuid());\r
+ ce_waypt_pr(wp);\r
+ write_xml_entity_end(ofd, "\t", "Mark");\r
+}\r
+\r
+/* Generate all route marks */\r
+static void\r
+ce_marks_pr(void)\r
+{\r
+ queue *elem, *tmp;\r
+ QUEUE_FOR_EACH(&ce_mark_head, elem, tmp) {\r
+ ce_mark *mark = (ce_mark *) elem;\r
+ write_xml_entity_begin2(ofd, "\t", "Mark",\r
+ "created", ce_gen_creation_time(mark->wp->creation_time),\r
+ "id", mark->id);\r
+ ce_waypt_pr(mark->wp);\r
+ write_xml_entity_end(ofd, "\t", "Mark");\r
+ ce_free_mark(mark);\r
}
}
+/* Write all routes and marks */\r
void
ce_write(void)
{
- setshort_whitespace_ok(mkshort_handle, 0);
- setshort_length(mkshort_handle, 32);
-
- fprintf(ofd, "<?xml version=\"1.0\"?>\n");
- fprintf(ofd, "<NavObjectCollection created=\"%s\"\n", ce_gen_current_time());
- fprintf(ofd, "\t<Name>Navigation Objects</Name>\n");
+ /* If doing routes, we write out the routes and all the standalone waypoints.\r
+ If doing waypoints, we write out the route waypoints (without the routes) and\r
+ the standalone waypoints.\r
+ */\r
+ time_t now = 0;\r
+ int short_length;\r
+ now = current_time();\r
+\r
+ write_xml_header(ofd);\r
+ write_xml_entity_begin1(ofd, "", "NavObjectCollection", "created",\r
+ ce_gen_current_time());\r
+ write_xml_entity(ofd, "\t", "Name", "Navigation Objects");\r
route_disp_all(ce_route_hdr, ce_route_tlr, ce_route_disp);
- ce_mark_pr();
- waypt_disp_all(ce_waypt_pr);
+ ce_marks_pr();\r
+ waypt_disp_all(ce_standalone_mark_pr);\r
- fprintf(ofd, "</NavObjectCollection>\n");
+ write_xml_entity_end(ofd, "", "NavObjectCollection");\r
}
ff_vecs_t coastexp_vecs = {
extern global_options global_opts;
extern const char gpsbabel_version[];
+/* Short or Long XML Times */
+#define XML_SHORT_TIME 1
+#define XML_LONG_TIME 2
+
/*
* Extended data if waypoint happens to represent a geocache. This is
* totally voluntary data...
<?xml version="1.0"?>
-<NavObjectCollection created="19691231T160000Z">
+<NavObjectCollection created="19700101T000000Z">
<Name>Navigation Objects</Name>
- <Route created="19691231T160000Z" id="{00010203-0405-0607-0809-0a0b0c0d0e0f}">
+ <Route created="19700101T000000Z" id="{00010203-0405-0607-0809-0a0b0c0d0e0f}">
<Marks>
{10111213-1415-1617-1819-1a1b1c1d1e1f}
{20212223-2425-2627-2829-2a2b2c2d2e2f}
</Marks>
<Name>Into The Bay</Name>
</Route>
- <Mark created="20041105T170909Z" id="{10111213-1415-1617-1819-1a1b1c1d1e1f}">
+ <Mark created="20041106T010909Z" id="{10111213-1415-1617-1819-1a1b1c1d1e1f}">
<Position>37.763290 N 122.282580 W</Position>
<Name>SFBALBAY</Name>
</Mark>
- <Mark created="20041105T170910Z" id="{20212223-2425-2627-2829-2a2b2c2d2e2f}">
+ <Mark created="20041106T010910Z" id="{20212223-2425-2627-2829-2a2b2c2d2e2f}">
<Position>37.751613 N 122.339028 W</Position>
<Name>SFBAY001</Name>
</Mark>
- <Mark created="20041105T170913Z" id="{30313233-3435-3637-3839-3a3b3c3d3e3f}">
+ <Mark created="20041106T010913Z" id="{30313233-3435-3637-3839-3a3b3c3d3e3f}">
<Position>37.817420 N 122.394305 W</Position>
<Name>SFBAY002</Name>
</Mark>
- <Mark created="20041105T170916Z" id="{40414243-4445-4647-4849-4a4b4c4d4e4f}">
+ <Mark created="20041106T010916Z" id="{40414243-4445-4647-4849-4a4b4c4d4e4f}">
<Position>37.819339 N 122.478302 W</Position>
<Name>SFGGBRDG</Name>
</Mark>
- <Mark created="20041105T170920Z" id="{50515253-5455-5657-5859-5a5b5c5d5e5f}">
+ <Mark created="20041106T010920Z" id="{50515253-5455-5657-5859-5a5b5c5d5e5f}">
<Position>37.773033 N 122.605838 W</Position>
<Name>SFCHNL01</Name>
</Mark>
- <Mark created="20041105T170926Z" id="{60616263-6465-6667-6869-6a6b6c6d6e6f}">
+ <Mark created="20041106T010926Z" id="{60616263-6465-6667-6869-6a6b6c6d6e6f}">
<Position>37.518860 N 122.529914 W</Position>
<Name>HMCOLREF</Name>
</Mark>
- <Mark created="20041105T170927Z" id="{70717273-7475-7677-7879-7a7b7c7d7e7f}">
+ <Mark created="20041106T010927Z" id="{70717273-7475-7677-7879-7a7b7c7d7e7f}">
<Position>37.482348 N 122.507704 W</Position>
<Name>HMPILL01</Name>
</Mark>
- <Mark created="20041105T211624Z" id="{80818283-8485-8687-8889-8a8b8c8d8e8f}">
+ <Mark created="20041106T051624Z" id="{80818283-8485-8687-8889-8a8b8c8d8e8f}">
<Position>37.475062 N 122.488531 W</Position>
<Name>HMPILLPT</Name>
</Mark>
- <Mark created="20041105T170929Z" id="{90919293-9495-9697-9899-9a9b9c9d9e9f}">
+ <Mark created="20041106T010929Z" id="{90919293-9495-9697-9899-9a9b9c9d9e9f}">
<Position>37.476448 N 122.475800 W</Position>
<Name>HMPILL02</Name>
</Mark>
- <Mark created="20041105T170930Z" id="{a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf}">
+ <Mark created="20041106T010930Z" id="{a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf}">
<Position>37.495102 N 122.483927 W</Position>
<Name>HMPILL03</Name>
</Mark>
- <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+ <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
<Position>37.229349 N 122.441589 W</Position>
<Name>PESCDR01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+ <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
<Position>37.183397 N 122.411904 W</Position>
<Name>PIGEON01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+ <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
<Position>37.090736 N 122.348775 W</Position>
<Name>ANONUV01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+ <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
<Position>36.929502 N 122.113725 W</Position>
<Name>SCRUZ01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+ <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
<Position>36.934235 N 122.022130 W</Position>
<Name>SCRUZ02</Name>
</Mark>
- <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+ <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
<Position>36.960666 N 122.024734 W</Position>
<Name>SCRUZENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+ <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
<Position>36.581344 N 121.995411 W</Position>
<Name>CYPRSSPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+ <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
<Position>36.301110 N 121.919097 W</Position>
<Name>PTSUR</Name>
</Mark>
- <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+ <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
<Position>36.238177 N 121.855209 W</Position>
<Name>COOPERPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+ <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
<Position>36.225175 N 121.801314 W</Position>
<Name>PFEIFENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+ <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
<Position>36.230449 N 121.797444 W</Position>
<Name>PFEIFANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+ <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
<Position>35.879801 N 121.498947 W</Position>
<Name>SANMRT01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+ <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
<Position>35.652801 N 121.308485 W</Position>
<Name>PDRSBLNC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+ <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
<Position>35.623297 N 121.185920 W</Position>
<Name>SNSMNENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+ <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
<Position>35.640478 N 121.183772 W</Position>
<Name>SNSMNANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+ <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
<Position>35.572353 N 121.152797 W</Position>
<Name>CAMBRIA</Name>
</Mark>
- <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+ <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
<Position>35.449214 N 121.020825 W</Position>
<Name>PTESTERO</Name>
</Mark>
- <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+ <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
<Position>35.216602 N 120.928391 W</Position>
<Name>PTBUCHON</Name>
</Mark>
- <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+ <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
<Position>34.883361 N 120.684631 W</Position>
<Name>PTSAL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+ <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
<Position>34.884641 N 120.652026 W</Position>
<Name>PTSALENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+ <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
<Position>34.896555 N 120.649124 W</Position>
<Name>PTSALANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+ <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
<Position>34.758180 N 120.642516 W</Position>
<Name>PURSMAPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+ <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
<Position>34.572579 N 120.663636 W</Position>
<Name>PTARGLLO</Name>
</Mark>
- <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+ <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
<Position>34.113844 N 120.492630 W</Position>
<Name>SANMGL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+ <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
<Position>34.029483 N 120.471409 W</Position>
<Name>SANMGL02</Name>
</Mark>
- <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+ <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
<Position>34.019184 N 120.444197 W</Position>
<Name>SANMGL03</Name>
</Mark>
- <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+ <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
<Position>34.023478 N 120.438209 W</Position>
<Name>ADCOVENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+ <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
<Position>34.028615 N 120.439696 W</Position>
<Name>ADCOVANC</Name>
</Mark>
<?xml version="1.0"?>
-<NavObjectCollection created="19691231T160000Z">
+<NavObjectCollection created="19700101T000000Z">
<Name>Navigation Objects</Name>
- <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+ <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
<Position>37.763290 N 122.282580 W</Position>
<Name>SFBALBAY</Name>
</Mark>
- <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+ <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
<Position>37.751613 N 122.339028 W</Position>
<Name>SFBAY001</Name>
</Mark>
- <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+ <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
<Position>37.817420 N 122.394305 W</Position>
<Name>SFBAY002</Name>
</Mark>
- <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+ <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
<Position>37.819339 N 122.478302 W</Position>
<Name>SFGGBRDG</Name>
</Mark>
- <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+ <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
<Position>37.773033 N 122.605838 W</Position>
<Name>SFCHNL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+ <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
<Position>37.518860 N 122.529914 W</Position>
<Name>HMCOLREF</Name>
</Mark>
- <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+ <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
<Position>37.482348 N 122.507704 W</Position>
<Name>HMPILL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+ <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
<Position>37.476448 N 122.475800 W</Position>
<Name>HMPILL02</Name>
</Mark>
- <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+ <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
<Position>37.495102 N 122.483927 W</Position>
<Name>HMPILL03</Name>
</Mark>
- <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+ <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
<Position>37.229349 N 122.441589 W</Position>
<Name>PESCDR01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+ <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
<Position>37.183397 N 122.411904 W</Position>
<Name>PIGEON01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+ <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
<Position>37.090736 N 122.348775 W</Position>
<Name>ANONUV01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+ <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
<Position>36.929502 N 122.113725 W</Position>
<Name>SCRUZ01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+ <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
<Position>36.934235 N 122.022130 W</Position>
<Name>SCRUZ02</Name>
</Mark>
- <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+ <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
<Position>36.960666 N 122.024734 W</Position>
<Name>SCRUZENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+ <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
<Position>37.475062 N 122.488531 W</Position>
<Name>HMPILLPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+ <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
<Position>36.581344 N 121.995411 W</Position>
<Name>CYPRSSPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+ <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
<Position>36.301110 N 121.919097 W</Position>
<Name>PTSUR</Name>
</Mark>
- <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+ <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
<Position>36.238177 N 121.855209 W</Position>
<Name>COOPERPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+ <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
<Position>36.225175 N 121.801314 W</Position>
<Name>PFEIFENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+ <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
<Position>36.230449 N 121.797444 W</Position>
<Name>PFEIFANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+ <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
<Position>35.879801 N 121.498947 W</Position>
<Name>SANMRT01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
+ <Mark created="19700101T000000Z" id="60616263-6465-6667-6869-6a6b6c6d6e6f">
<Position>35.652801 N 121.308485 W</Position>
<Name>PDRSBLNC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
+ <Mark created="19700101T000000Z" id="70717273-7475-7677-7879-7a7b7c7d7e7f">
<Position>35.623297 N 121.185920 W</Position>
<Name>SNSMNENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
+ <Mark created="19700101T000000Z" id="80818283-8485-8687-8889-8a8b8c8d8e8f">
<Position>35.640478 N 121.183772 W</Position>
<Name>SNSMNANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
+ <Mark created="19700101T000000Z" id="90919293-9495-9697-9899-9a9b9c9d9e9f">
<Position>35.572353 N 121.152797 W</Position>
<Name>CAMBRIA</Name>
</Mark>
- <Mark created="19691231T160000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
+ <Mark created="19700101T000000Z" id="a0a1a2a3-a4a5-a6a7-a8a9-aaabacadaeaf">
<Position>35.449214 N 121.020825 W</Position>
<Name>PTESTERO</Name>
</Mark>
- <Mark created="19691231T160000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
+ <Mark created="19700101T000000Z" id="b0b1b2b3-b4b5-b6b7-b8b9-babbbcbdbebf">
<Position>35.216602 N 120.928391 W</Position>
<Name>PTBUCHON</Name>
</Mark>
- <Mark created="19691231T160000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
+ <Mark created="19700101T000000Z" id="c0c1c2c3-c4c5-c6c7-c8c9-cacbcccdcecf">
<Position>34.883361 N 120.684631 W</Position>
<Name>PTSAL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
+ <Mark created="19700101T000000Z" id="d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf">
<Position>34.884641 N 120.652026 W</Position>
<Name>PTSALENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
+ <Mark created="19700101T000000Z" id="e0e1e2e3-e4e5-e6e7-e8e9-eaebecedeeef">
<Position>34.896555 N 120.649124 W</Position>
<Name>PTSALANC</Name>
</Mark>
- <Mark created="19691231T160000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
+ <Mark created="19700101T000000Z" id="f0f1f2f3-f4f5-f6f7-f8f9-fafbfcfdfeff">
<Position>34.758180 N 120.642516 W</Position>
<Name>PURSMAPT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
+ <Mark created="19700101T000000Z" id="00010203-0405-0607-0809-0a0b0c0d0e0f">
<Position>34.572579 N 120.663636 W</Position>
<Name>PTARGLLO</Name>
</Mark>
- <Mark created="19691231T160000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
+ <Mark created="19700101T000000Z" id="10111213-1415-1617-1819-1a1b1c1d1e1f">
<Position>34.113844 N 120.492630 W</Position>
<Name>SANMGL01</Name>
</Mark>
- <Mark created="19691231T160000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
+ <Mark created="19700101T000000Z" id="20212223-2425-2627-2829-2a2b2c2d2e2f">
<Position>34.029483 N 120.471409 W</Position>
<Name>SANMGL02</Name>
</Mark>
- <Mark created="19691231T160000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
+ <Mark created="19700101T000000Z" id="30313233-3435-3637-3839-3a3b3c3d3e3f">
<Position>34.019184 N 120.444197 W</Position>
<Name>SANMGL03</Name>
</Mark>
- <Mark created="19691231T160000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
+ <Mark created="19700101T000000Z" id="40414243-4445-4647-4849-4a4b4c4d4e4f">
<Position>34.023478 N 120.438209 W</Position>
<Name>ADCOVENT</Name>
</Mark>
- <Mark created="19691231T160000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
+ <Mark created="19700101T000000Z" id="50515253-5455-5657-5859-5a5b5c5d5e5f">
<Position>34.028615 N 120.439696 W</Position>
<Name>ADCOVANC</Name>
</Mark>
compare ${TMPDIR}/navi.wpt reference/navicache.ref
#
-#
-# CoastalExplorer..
-${PNAME} -i coastexp -f reference/coastexp.nob -o gpx -F ${TMPDIR}/coastexp.gpx
-compare ${TMPDIR}/coastexp.gpx reference/coastexp.ref
-#
-
#
# CoastalExplorer..
${PNAME} -r -i coastexp -f reference/coastexp.nob -o gpx -F ${TMPDIR}/coastexp.gpx
{
&coastexp_vecs,
"coastexp",
- "CoastalExplorer.com XML",
+ "CoastalExplorer XML",
NULL
},
{ /* MRCB */
}
void
-xml_write_time(FILE *ofd, const time_t timep, char *elname)
+xml_fill_in_time(char *time_string, const time_t timep, int long_or_short)
{
struct tm *tm = gmtime(&timep);
+ char *format;
if (!tm)
return;
- fprintf(ofd, "<%s>%02d-%02d-%02dT%02d:%02d:%02dZ</%s>\n",
- elname,
+ if (long_or_short == XML_LONG_TIME)
+ format = "%02d-%02d-%02dT%02d:%02d:%02dZ";
+ else
+ format = "%02d%02d%02dT%02d%02d%02dZ";
+ sprintf(time_string, format,
tm->tm_year+1900,
tm->tm_mon+1,
tm->tm_mday,
tm->tm_hour,
tm->tm_min,
- tm->tm_sec,
+ tm->tm_sec);
+}
+
+void
+xml_write_time(FILE *ofd, const time_t timep, char *elname)
+{
+ char time_string[64];
+ xml_fill_in_time(time_string, timep, XML_LONG_TIME);
+ fprintf(ofd, "<%s>%s</%s>\n",
+ elname,
+ time_string,
elname
);